# -*- coding: utf-8 -*-

'''包含 :py:class:`~pdf2docx.page.Page` 实例的集合。'''

import logging

from .RawPageFactory import RawPageFactory
from ..common.Collection import BaseCollection
from ..font.Fonts import Fonts


class Pages(BaseCollection):
    '''``Page`` 的集合。'''

    def parse(self, fitz_doc, **settings):
        '''分析文档结构，例如页面章节、页眉、页脚。

        参数:
            fitz_doc (fitz.Document): ``PyMuPDF`` 文档实例。
            settings (dict): 解析参数。
        '''
        # ---------------------------------------------
        # 0. 提取字体属性，特别是行高比例
        # ---------------------------------------------
        fonts = Fonts.extract(fitz_doc)

        # ---------------------------------------------
        # 1. 提取然后清理原始页面
        # ---------------------------------------------
        pages, raw_pages = [], []
        words_found = False
        for page in self:
            if page.skip_parsing: continue

            # 初始化并从PDF中提取数据
            raw_page = RawPageFactory.create(page_engine=fitz_doc[page.id], backend='PyMuPDF')
            raw_page.restore(**settings)

            # 检查是否提取到任何单词，因为扫描的pdf可能会被定向
            if not words_found and raw_page.raw_text.strip():
                words_found = True

            # 基于边界框处理块和形状
            raw_page.clean_up(**settings)

            # 处理字体属性
            raw_page.process_font(fonts)            

            # 完成此步骤后，我们可以获得一些基本属性
            # 注意：浮动图像在清理块时被检测到，所以在这里收集它们
            page.width = raw_page.width
            page.height = raw_page.height
            page.float_images.reset().extend(raw_page.blocks.floating_image_blocks)

            raw_pages.append(raw_page)
            pages.append(page)

        # 如果没有找到单词，显示消息
        if not words_found:
            logging.warning('单词数量: 0。这可能是扫描版的pdf，目前不支持。')

        
        # ---------------------------------------------
        # 2. 在文档/页面级别解析结构
        # ---------------------------------------------
        # 注意：在此步骤中可能会更改块结构，例如提升页眉/页脚，
        # 所以基于块结构的处理，例如计算边距，解析章节应该
        # 在此步骤之后运行。
        header, footer = Pages._parse_document(raw_pages)


        # ---------------------------------------------
        # 3. 在页面级别解析结构，例如页边距、章节
        # ---------------------------------------------
        # 解析章节
        for page, raw_page in zip(pages, raw_pages):
            # 页面边距
            margin = raw_page.calculate_margin(**settings)
            raw_page.margin = page.margin = margin

            # 页面章节
            sections = raw_page.parse_section(**settings)
            page.sections.extend(sections)
    

    @staticmethod
    def _parse_document(raw_pages:list):
        '''在文档/页面级别解析结构，例如页眉、页脚'''
        # TODO
        return '', ''